home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / comm / net / pronet21.lha / source / filesystem / pronet-server.s
Text File  |  1995-07-07  |  25KB  |  1,224 lines

  1. ;: > pronet-server.s
  2. ;:
  3. ;: ©1994-1995 by Michael Krause
  4. ;:
  5. ;: 16.07.1994    started..
  6. ;: 24-01-95 if a port number occurs again while ADDNEWHANDLER, we assume that
  7. ;:          other side has reset, so we clear all our data and start from the
  8. ;:        beginning!! v34.1
  9.  
  10. ;: 01-04-95 SegList splitting v34.2
  11.  
  12. ;: 14-04-95 MsgRemDisk (or similar??) won't cause the 50frames-Delay.
  13. ;:        dann noch ACT_READ bug-gefixt??
  14. ;: 15-04-95 read und write geben statt NO_FREE_STORE jetzt OBJECT_TOO_LARGE
  15. ;:        zurück v34.3
  16.  
  17. ;: 17-04-95 READ-Transfer umgebaut v34.4
  18. ;: 29-04-95 EXAMINE-Packets neu programmiert v34.5
  19.  
  20. ;: 08-05-95 Statt des Devicenamens wird jetzt Unitnummer
  21. ;:        vom CLI-String übernommen v34.6
  22.  
  23. ;: 12-05-95 MsgRemDisk didn't set d7... v34.7
  24.  
  25. ;: 15-06-95 SegList splitting removed. v34.8
  26.  
  27. ;: 07-07-95 UNIT argument didn't work... v35.0
  28.  
  29. DEBUG        equ    0
  30.  
  31. ;++ bei aCT_NEWHANDLER nach CreateStdPacket prüfen -> freemem
  32.  
  33.         include    "exec/exec.i"
  34.         include    "dos/dos.i"
  35.         include    "dos/dosextens.i"
  36.         include    "dos/filehandler.i"
  37.         include    "devices/input.i"
  38.         include    "devices/inputevent.i"
  39.         include    "A:ProNET/include/devices/pronet.i"
  40.         include    "A:OSmacros.i"
  41.  
  42.         include    "A:ProNET/source/network.i"
  43.  
  44.         include    "exec_lib.i"
  45.         include    "dos_lib.i"
  46.         include    "intuition_lib.i"
  47.  
  48.           STRUCTURE    PNSHandlerNode,0
  49.         APTR    phn_next        ;Verkettung
  50.         UWORD    phn_port        ;dazugehörige Portnummer
  51.         APTR    phn_handlerID        ;ProcessID des Handlers
  52.         APTR    phn_packet        ;StandardPKT zur Handlerkommunikation
  53.                     ; packet ist *sp_Pkt, nicht *sp_Msg!!
  54.         APTR    phn_devnode    ;DevNode des Handlers
  55.         APTR    phn_volnode    ;aktuelle Volume
  56.         APTR    phn_dlbuf    ;DownLoad-Buffer
  57.         APTR    phn_dlbufpt    ;aktuelle Position
  58.         ULONG    phn_dlbytes    ;wieviel Bytes noch ?? 0 = nix
  59.         LABEL    phn_SIZEOF
  60.  
  61.         section    startup,code
  62.  
  63. j        jsr    dec2long
  64.         move.l    d1,unit
  65.  
  66.     IFNE    DEBUG
  67.     bsr    dinit
  68.     ENDC
  69.  
  70.         move.l    4.w,a6
  71.         move.l    ThisTask(a6),ourtask
  72.         lea    dosname(pc),a1
  73.         moveq    #33,d0
  74.         jsr    -552(a6)
  75.         move.l    d0,dosbase
  76.         beq.s    nodos
  77.  
  78.         move.l    ourtask(pc),a0
  79.         move.l    #-1,pr_WindowPtr(a0)
  80.  
  81.         bsr    StartInputHandler
  82.  
  83.         bsr    startpronet
  84.         tst.w    d0
  85.         bne.s    nopronet
  86.  
  87.         bsr    startmessage
  88.         bra    Wait4Message
  89.  
  90. nopronet    move.l    dosbase(pc),a1
  91.         move.l    4.w,a6
  92.         jsr    -414(a6)
  93. nodos
  94.     IFNE    DEBUG
  95.     bsr    dexit
  96.     ENDC
  97.         moveq    #20,d0
  98.         rts
  99.  
  100.         dc.b    "$VER: pronet-server 35.0 (07-07-95)",13,10,0
  101.         even
  102.  
  103. startpronet    moveq    #pnr_Size,d0
  104.         bsr    GetIORequest
  105.         move.l    d0,pronetio
  106.         beq    spnoioreq
  107.         bsr    CreatePort
  108.         move.l    d0,pronetmsgport
  109.         beq    spnomsgport
  110.         lea    pronetname(pc),a0
  111.         move.l    unit(pc),d0
  112.         moveq    #0,d1
  113.         move.l    pronetio(pc),a1
  114.         move.w    #0,pnr_NetSourcePort(a1)
  115.         move.l    pronetmsgport(pc),pnr_MsgPort(a1)
  116.         move.l    4.w,a6
  117.         LIBCALL    OpenDevice
  118.         tst.l    d0
  119.         bne.s    spnodev
  120.         move.l    pronetio(pc),a1
  121.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  122.         clr.l    pnr_Length2(a1)
  123.         move.l    pronetmsgport(pc),a0
  124.         move.b    MP_SIGBIT(a0),Signal.pronet
  125.         moveq    #0,d0
  126.         rts
  127.  
  128. spnodev        move.l    pronetmsgport(pc),a0
  129.         bsr    DeletePort
  130. spnomsgport    move.l    pronetio(pc),a0
  131.         bsr    FreeIORequest
  132. spnoioreq    moveq    #-1,d0
  133.         rts
  134.  
  135. ; -- InputHandler zum Handlen der DISKREMOVED/INSERTED-Messages hochfahren
  136. ; -- und entsprechende Signalbits für's Hauptprogramm eintragen.
  137. StartInputHandler
  138.         move.l    4.w,a6
  139.         moveq    #-1,d0
  140.         LIBCALL    AllocSignal
  141.         move.b    d0,Signal.diskins
  142.         moveq    #-1,d0
  143.         LIBCALL    AllocSignal
  144.         move.b    d0,Signal.diskrem
  145.  
  146.         moveq    #IOSTD_SIZE,d0
  147.         bsr    GetIORequest
  148.         move.l    d0,a3
  149.         move.l    a3,inputio
  150.         lea    inputname(pc),a0
  151.         moveq    #0,d0
  152.         moveq    #0,d1
  153.         move.l    a3,a1
  154.         move.l    4.w,a6
  155.         LIBCALL    OpenDevice
  156.  
  157.         move.l    a3,a1
  158.         move.w    #IND_ADDHANDLER,IO_COMMAND(a1)
  159.         move.l    #.int,IO_DATA(a1)
  160.         LIBCALL    DoIO
  161.         rts
  162. .int        dc.l    0,0
  163.         dc.b    NT_INTERRUPT,100
  164.         dc.l    .intname,0,InputHandlerRout
  165. .intname    dc.b    "ProNET Server",0
  166.         even
  167.  
  168. startmessage    move.l    dosbase(pc),a6
  169.         LIBCALL    Output
  170.         move.l    d0,d1
  171.         move.l    #starttext,d2
  172.         move.l    #starttextl,d3
  173.         LIBCALL    Write
  174.         rts
  175.  
  176. w4mquitflag    dc.w    0
  177. Wait4Message    tst.w    w4mquitflag
  178.         bne    .quit
  179.         clr.w    w4mquitflag
  180.  
  181.         lea    Signals(pc),a3    * auf die Messages
  182.         moveq    #0,d0        * an allen möglichen
  183.         moveq    #numports-1,d1    * Ports warten
  184. .loop1        move.b    (a3),d2
  185.         bmi.s    .0
  186.         bset    d2,d0
  187. .0        addq.w    #6,a3
  188.         dbra    d1,.loop1
  189.     IFNE    DEBUG
  190.     lea    dwaitt(pc),a0
  191.     bsr    dtype
  192.     ENDC
  193.         move.l    4.w,a6
  194.         LIBCALL    Wait
  195.                     * entsprechende Routinen
  196.         moveq    #31,d7        * aufrufen
  197. .00        rol.l    #1,d0
  198.         bcc.s    .notthisbit
  199.         lea    Signals(pc),a3
  200.         moveq    #numports-1,d4
  201. .01        cmp.b    (a3),d7
  202.         bne.s    .notthisport
  203.         movem.l    d0/d4/d7/a3,-(sp)
  204.         move.l    2(a3),a3
  205.         jsr    (a3)
  206.         movem.l    (sp)+,d0/d4/d7/a3
  207. .notthisport    addq.w    #6,a3
  208.         dbra    d4,.01
  209. .notthisbit    dbra    d7,.00    
  210.  
  211.         bra    Wait4Message
  212. .quit        rts
  213. Signals:
  214. Signal.pronet    dc.b    -1,0            ;Signalbit
  215.         dc.l    GetProNETMsg        ;entsprechende Routine
  216. Signal.diskins    dc.b    -1,0
  217.         dc.l    MsgDiskIns
  218. Signal.diskrem    dc.b    -1,0
  219.         dc.l    MsgDiskRem
  220. numports    equ    3
  221.  
  222. InputHandlerRout
  223.         movem.l    a0/a1/a6,-(sp)
  224.         move.l    a0,d0
  225.         beq.s    .ende
  226.         move.l    4.w,a6
  227. .1        move.b    ie_Class(a0),d0
  228.         cmp.b    #IECLASS_DISKREMOVED,d0
  229.         beq.s    .diskrem
  230.         cmp.b    #IECLASS_DISKINSERTED,d0
  231.         beq.s    .diskins
  232. .next        move.l    (a0),a0
  233.         move.l    a0,d0
  234.         bne.s    .1
  235. .ende        movem.l    (sp)+,a0/a1/a6
  236.         move.l    a0,d0
  237.         rts
  238. .diskrem    move.l    ourtask(pc),a1
  239.         moveq    #0,d0
  240.         move.b    Signal.diskrem(pc),d1
  241.         bset    d1,d0
  242.         LIBCALL    Signal
  243.         bra.s    .next
  244. .diskins    move.l    ourtask(pc),a1
  245.         moveq    #0,d0
  246.         move.b    Signal.diskins(pc),d1
  247.         bset    d1,d0
  248.         LIBCALL    Signal
  249.         bra.s    .next
  250.  
  251. ; -- Eine Disk wurde neu eingelegt - hier wird getestet, ob es eine
  252. ; -- von unseren Gast-Handlern ist, wenn ja, werden entsprechende
  253. ; -- Maßnahmen eingeleitet...
  254. MsgDiskIns
  255.         IFNE    DEBUG
  256.         move.w    #$0f0,$dff180
  257.         ENDC
  258.         move.l    #ACTION_DISKINS,d6
  259.         moveq    #2,d7
  260.         bra.s    msginsrem_sub
  261.  
  262. ; -- Eine Disk wurde entnommen - siehe 'MsgDiskIns'
  263. MsgDiskRem
  264.         IFNE    DEBUG
  265.         move.w    #$f00,$dff180
  266.         ENDC
  267.         move.l    #ACTION_DISKREM,d6
  268.         moveq    #2,d7
  269.         bra.s    msginsrem_nodel
  270.  
  271. msginsrem_sub    subq.w    #1,d7
  272.         bpl.s    .0
  273.         rts
  274. .0        move.l    dosbase(pc),a6
  275.         moveq    #50,d1
  276.         LIBCALL    Delay
  277.  
  278. msginsrem_nodel    lea    HandlerList(pc),a2    ;in d6 ACTION_DISKINS/REM
  279. .loop        move.l    (a2),d0
  280.         beq.s    msginsrem_sub
  281.         move.l    d0,a2
  282.         move.l    phn_handlerID(a2),a0
  283.         bsr    FindVolume
  284.         cmp.l    phn_volnode(a2),d0
  285.         beq.s    .loop
  286.         move.l    d0,a5
  287.         move.l    d0,phn_volnode(a2)    * Disk wurde gewechselt !!
  288.  
  289.         move.l    phn_dlbytes(a2),d0    ;es wird gerade downgeloadet
  290.         bne.s    .ende            ;(ne Msg würde den Betrieb
  291.                         ;stören !!)
  292.         move.l    pronetio(pc),a4        * Message an den Handler
  293.         move.w    phn_port(a2),pnr_NetDestPort(a4)    * schicken..
  294.         lea    sendbuf,a3
  295.         move.l    d6,(a3)+
  296.         cmp.l    #ACTION_DISKREM,d6
  297.         beq.s    .nocopy
  298.         move.l    a5,d0
  299.         lsr.l    #2,d0
  300.         move.l    d0,(a3)+
  301.         lea    dol_VolumeDate(a5),a0
  302.         move.l    (a0)+,(a3)+
  303.         move.l    (a0)+,(a3)+
  304.         move.l    (a0)+,(a3)+    ;VolumeDate und Name
  305.         move.l    dol_Name(a5),a0    ;müssen kopiert werden..
  306.         add.l    a0,a0
  307.         add.l    a0,a0
  308.         moveq    #0,d0
  309.         move.b    (a0),d0
  310.         addq.w    #1,d0
  311. .copyname    move.b    (a0)+,(a3)+
  312.         dbra    d0,.copyname
  313. .nocopy        lea    sendbuf,a0
  314.         move.l    a0,pnr_Data1(a4)
  315.         sub.l    a0,a3
  316.         move.l    a3,pnr_Length1(a4)
  317.         move.l    4.w,a6
  318.         move.l    a4,a1
  319.         LIBCALL    DoIO
  320. .ende        rts
  321.  
  322. GetProNETMsg    move.l    4.w,a6
  323.         move.l    pronetmsgport(pc),a0
  324.         LIBCALL    GetMsg
  325.         tst.l    d0
  326.         beq    .ende
  327.         move.l    d0,actpronetmsg
  328.         move.l    d0,a2
  329.         lea    MN_SIZE(a2),a2
  330.         move.w    (a2)+,d2    ;[d2] Sourceport [a2] Data
  331.         move.l    (a2)+,d0    ;[d0] dp_Action
  332.     IFNE    DEBUG
  333.     bsr    dtypedec
  334.     bsr    dcr
  335.     ENDC
  336.         lea    sendbuf+12,a3    ;[a3] sendbuf+12
  337.         move.l    d0,-12(a3)
  338.         move.l    pronetio(pc),a4    ;[a4] PNRequest
  339.         move.w    d2,pnr_NetDestPort(a4)
  340.         lea    HandlerList(pc),a5
  341. .findnodeloop    move.l    (a5),a5
  342.         move.l    a5,d1
  343.         beq.s    .findrout
  344.         cmp.w    phn_port(a5),d2
  345.         bne.s    .findnodeloop
  346.         move.l    phn_dlbytes(a5),d7
  347.         beq.s    .nodown
  348.         lea    ACT_WRITEdownload(pc),a1
  349.         bra.s    .callit
  350. .nodown        move.l    phn_packet(a5),a4
  351.         move.l    d0,dp_Action(a4)
  352. .findrout    lea    at(pc),a0
  353.         moveq    #atl-1,d1
  354. .findroutloop    cmp.l    (a0),d0
  355.         bcs.s    .next
  356.         cmp.l    4(a0),d0
  357.         bls.s    .jsrroutine
  358. .next        lea    12(a0),a0
  359.         dbra    d1,.findroutloop
  360.         bsr    ACT_NIL
  361.         bra.s    .reply
  362. .jsrroutine    sub.l    (a0),d0
  363.         add.l    d0,d0
  364.         move.l    8(a0),a0
  365.         lea    at(pc),a1
  366.         add.w    (a0,d0.l),a1
  367. .callit        jsr    (a1)
  368. .reply        move.l    actpronetmsg(pc),a1
  369.         move.l    4.w,a6
  370.         LIBCALL    ReplyMsg
  371.         bra    GetProNETMsg
  372. .ende        rts
  373.  
  374.         cnop    0,4
  375. at        ;dc.l    lowerbound,upperbound,tableaddress
  376.         dc.l    7,34,actiontable1
  377.         dc.l    40,40,actiontable2
  378.         dc.l    82,82,actiontable3
  379.         dc.l    87,87,actiontable4
  380.         dc.l    1004,1008,actiontable5
  381.         dc.l    1020,1034,actiontable6
  382.         dc.l    2008,2009,actiontable7
  383.         dc.l    4097,4098,actiontable8
  384.         dc.l    4200,4200,actiontable9
  385.         dc.l    19941994,19941994,actiontable10
  386.         dc.l    19941998,19941999,actiontable11
  387. atl        equ    (*-at)/12
  388.  
  389.         cnop    0,4
  390. actiontable1    dc.w    ACT_CURRENT_VOLUME-at,ACT_LOCATE_OBJECT-at,ACT_RENAME_DISK-at,ACT_NIL-at,ACT_NIL-at
  391.         dc.w    ACT_NIL-at,ACT_NIL-at,ACT_NIL-at,ACT_FREE_LOCK-at,ACT_DELETE_OBJECT-at
  392.         dc.w    ACT_RENAME_OBJECT-at,ACT_MORE_CACHE-at,ACT_COPY_DIR-at,ACT_NIL-at
  393.         dc.w    ACT_SET_PROTECT-at,ACT_CREATE_DIR-at,ACT_EXAMINE_OBJECT-at,ACT_EXAMINE_OBJECT-at
  394.         dc.w    ACT_DISK_INFO-at,ACT_INFO-at,ACT_FLUSH-at,ACT_SET_COMMENT-at
  395.         dc.w    ACT_PARENT-at,ACT_NIL-at,ACT_INHIBIT-at,ACT_NIL-at
  396.         dc.w    ACT_NIL-at,ACT_SET_DATE-at
  397. actiontable2    dc.w    ACT_SAME_LOCK-at
  398. actiontable3    dc.w    ACT_READ-at
  399. actiontable4    dc.w    ACT_WRITE-at
  400. actiontable5    dc.w    ACT_FINDxxx-at
  401.         dc.w    ACT_FINDxxx-at,ACT_FINDxxx-at,ACT_END-at,ACT_SEEK-at
  402. actiontable6    dc.w    ACT_FORMAT-at,ACT_MAKE_LINK-at,ACT_SET_FILE_SIZE-at,ACT_WRITE_PROTECT-at
  403.         dc.w    ACT_READ_LINK-at,ACT_NIL-at,ACT_FH_FROM_LOCK-at,ACT_NIL-at
  404.         dc.w    ACT_CHANGE_MODE-at,ACT_NIL-at,ACT_COPY_DIR_FH-at,ACT_PARENT_FH-at
  405.         dc.w    ACT_NIL-at,ACT_NIL-at,ACT_EXAMINE_FH-at
  406. actiontable7    dc.w    ACT_LOCK_RECORD-at,ACT_FREE_RECORD-at
  407. actiontable8    dc.w    ACT_ADD_NOTIFY-at,ACT_REMOVE_NOTIFY-at
  408. actiontable9    dc.w    ACT_SERIALIZE_DISK-at
  409. actiontable10    dc.w    ACT_NEWHANDLER-at
  410. actiontable11    dc.w    ACT_RUN-at,ACT_PAGE-at
  411.  
  412.         cnop    0,4
  413. ** The routines will be called with the registers containing following:
  414. ** a6 Execbase
  415. ** a5 PNSHandlerNode für den entspr. Port oder NULL (packet->dp_action is ready !!)
  416. ** a4 phn_packet
  417. ** a3 sendbuf+12 (sendbuf filled with dp_Action,{res1},{res2})
  418. ** a2 received data (after dp_Action)
  419. ** d2 Sourceport
  420.  
  421. ACT_NIL
  422.         move.l    #DOSFALSE,d0
  423.         move.l    #ERROR_ACTION_NOT_KNOWN,d1
  424.         bra    answerpacket
  425.  
  426. ACT_LOCATE_OBJECT
  427.         move.l    (a2)+,dp_Arg1(a4)
  428.         move.l    (a2)+,dp_Arg3(a4)
  429.         addq.w    #2,a2    ;frei, wegen LW-align..
  430.         move.l    a2,d0
  431.         lsr.l    #2,d0
  432.         move.l    d0,dp_Arg2(a4)
  433.         bsr    dopacket
  434.         tst.l    d0
  435.         beq.s    .return
  436.         move.l    d0,a0
  437.         add.l    a0,a0
  438.         add.l    a0,a0
  439.         move.l    fl_Volume(a0),(a3)+
  440. .return        bra    answerpacket
  441.  
  442. ACT_RENAME_DISK
  443.         addq.w    #2,a2
  444.         move.l    a2,d0
  445.         lsr.l    #2,d0
  446.         move.l    d0,dp_Arg1(a4)
  447.         bsr    dopacket
  448.         bra    answerpacket
  449.  
  450. ACT_FREE_LOCK
  451.         move.l    (a2)+,dp_Arg1(a4)
  452.         bra    dopacket
  453.  
  454. ACT_DELETE_OBJECT
  455.         move.l    (a2)+,dp_Arg1(a4)
  456.         addq.w    #2,a2
  457.         move.l    a2,d0
  458.         lsr.l    #2,d0
  459.         move.l    d0,dp_Arg2(a4)
  460.         bsr    dopacket
  461.         bra    answerpacket
  462.  
  463. ACT_RENAME_OBJECT
  464.         move.l    (a2)+,dp_Arg1(a4)
  465.         move.l    (a2)+,dp_Arg3(a4)
  466.         addq.w    #2,a2
  467.         lea    256(a2),a0
  468.         move.l    a2,d0
  469.         move.l    a0,d1
  470.         lsr.l    #2,d0
  471.         lsr.l    #2,d1
  472.         move.l    d0,dp_Arg2(a4)
  473.         move.l    d1,dp_Arg4(a4)
  474.         bsr    dopacket
  475.         bra    answerpacket
  476.  
  477. ACT_MORE_CACHE
  478.         move.l    (a2),dp_Arg1(a4)
  479.         bsr    dopacket
  480.         bra    answerpacket
  481.  
  482. ACT_COPY_DIR
  483.         move.l    (a2),dp_Arg1(a4)
  484.         bsr    dopacket
  485.         tst.l    d0
  486.         beq.s    .return
  487.         move.l    d0,a0
  488.         add.l    a0,a0
  489.         add.l    a0,a0
  490.         move.l    fl_Volume(a0),(a3)+
  491.         move.l    fl_Access(a0),(a3)+
  492. .return        bra    answerpacket
  493.  
  494. ACT_SET_PROTECT
  495.         move.l    (a2)+,dp_Arg2(a4)
  496.         move.l    (a2)+,dp_Arg4(a4)
  497.         addq.w    #2,a2
  498.         move.l    a2,d0
  499.         lsr.l    #2,d0
  500.         move.l    d0,dp_Arg3(a4)
  501.         bsr    dopacket
  502.         bra    answerpacket
  503.  
  504. ACT_CREATE_DIR
  505.         move.l    (a2)+,dp_Arg1(a4)
  506.         addq.w    #2,a2
  507.         move.l    a2,d0
  508.         lsr.l    #2,d0
  509.         move.l    d0,dp_Arg2(a4)
  510.         bsr    dopacket
  511.         tst.l    d0
  512.         beq.s    .return
  513.         move.l    d0,a0
  514.         add.l    a0,a0
  515.         add.l    a0,a0
  516.         move.l    fl_Volume(a0),(a3)+
  517.         move.l    fl_Access(a0),(a3)+
  518. .return        bra    answerpacket
  519.  
  520. ACT_EXAMINE_OBJECT    ;EXAMINEs neu 29-04-95
  521.         move.l    (a2)+,dp_Arg1(a4)
  522. act_ex_entry    lea    workfib,a1
  523.         move.l    a1,d0
  524.         lsr.l    #2,d0
  525.         move.l    d0,dp_Arg2(a4)
  526.         move.l    (a2)+,(a1)+    ;fib_DiskKey
  527.         addq.l    #4,a1
  528.         move.w    #32/4-1,d0
  529. .copyname    move.l    (a2)+,(a1)+
  530.         dbra    d0,.copyname    ;fib_FileName
  531.  
  532.         bsr    dopacket
  533.  
  534.         lea    workfib,a1    ;return whole FIB
  535.         move.w    #(fib_SIZEOF)/4-1,d0
  536. .copyfib    move.l    (a1)+,(a3)+
  537.         dbra    d0,.copyfib
  538.  
  539.         movem.l    dp_Res1(a4),d0/d1
  540.         bra    answerpacket
  541.  
  542. ACT_EXAMINE_FH
  543.         GETBPTR    (a2)+,a0
  544.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  545.         bra.s    act_ex_entry
  546.  
  547. ACT_FLUSH
  548.         bsr    dopacket
  549.         bra    answerpacket
  550.  
  551. ACT_SET_COMMENT
  552.         move.l    (a2)+,dp_Arg2(a4)
  553.         move.l    a2,d0
  554.         move.l    a2,d1
  555.         addq.l    #2,d0
  556.         add.l    #82,d1
  557.         lsr.l    #2,d0
  558.         lsr.l    #2,d1
  559.         move.l    d1,dp_Arg3(a4)
  560.         move.l    d0,dp_Arg4(a4)
  561.         bsr    dopacket
  562.         bra    answerpacket
  563.  
  564. ACT_PARENT
  565.         bra    ACT_COPY_DIR
  566.  
  567. ACT_SET_DATE
  568.         move.l    (a2)+,dp_Arg2(a4)
  569.         move.l    a2,dp_Arg4(a4)
  570.         lea    14(a2),a2
  571.         move.l    a2,d0
  572.         lsr.l    #2,d0
  573.         move.l    d0,dp_Arg3(a4)
  574.         bsr    dopacket
  575.         bra    answerpacket
  576.  
  577. ACT_SAME_LOCK
  578.         move.l    (a2)+,dp_Arg1(a4)
  579.         move.l    (a2),dp_Arg2(a4)
  580.         bsr    dopacket
  581.         tst.w    d0
  582.         bne.s    .return
  583.         cmp.l    #ERROR_ACTION_NOT_KNOWN,d1
  584.         bne.s    .return
  585.         moveq    #DOSFALSE,d0
  586.         moveq    #0,d1
  587.         GETBPTR    -4(a2),a0    ;Locks von Hand vergleichen..
  588.         GETBPTR    (a2),a1
  589.         move.l    fl_Volume(a0),d2
  590.         cmp.l    fl_Volume(a1),d2
  591.         bne.s    .return
  592.         move.l    fl_Key(a0),d2
  593.         cmp.l    fl_Key(a1),d2
  594.         bne.s    .return
  595.         moveq    #DOSTRUE,d0
  596. .return        bra    answerpacket
  597.  
  598. ACT_READ    ** New routine on 17-04-95
  599.         GETBPTR    (a2)+,a0
  600.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  601.         move.l    (a2),d7        ;Length of the read packet
  602.  
  603.         moveq    #0,d6        ;NumBytes already read
  604.  
  605.         move.l    pronetio(pc),a2
  606.         lea    sendbuf,a3
  607.         move.l    a3,pnr_Data1(a2)
  608.  
  609. .loop        move.l    #MAXPACKETSIZE,d0    *Read A Bunch of Bytes
  610.         cmp.l    d0,d7
  611.         bcc.s    .lenok
  612.         move.l    d7,d0
  613. .lenok        move.l    d0,dp_Arg3(a4)
  614.         lea    12(a3),a0
  615.         move.l    a0,dp_Arg2(a4)
  616.         bsr    dopacket
  617.         tst.l    d0            *Error?
  618.         bmi.s    .ERROR
  619.  
  620.         move.l    d0,4(a3)        *Send packet including
  621.         add.l    #12,d0            *num bytes now read
  622.         move.l    d0,pnr_Length1(a2)
  623.         move.l    a2,a1
  624.         LIBCALL    DoIO
  625.  
  626.         move.l    4(a3),d0
  627.         beq.s    .EOF            *EOF occured
  628.  
  629.         add.l    d0,d6
  630.         sub.l    d0,d7
  631.         bgt.s    .loop            *still bytes left
  632.  
  633. .EOF    * In case of EOF, we don't have to send an additional msg, because
  634.     * the handler already knows that we have reached the end.
  635.         rts
  636.  
  637. .ERROR        move.l    d0,4(a3)        *send error msg
  638.         move.l    d1,8(a3)
  639.         move.l    a3,pnr_Data1(a2)
  640.         move.l    #12,pnr_Length1(a2)
  641.         move.l    a2,a1
  642.         LIBCALL    SendIO
  643.  
  644.         move.l    #ACTION_SEEK,dp_Action(a4) *and reset filepointer
  645.         move.l    d6,dp_Arg2(a4)
  646.         move.l    #OFFSET_CURRENT,dp_Arg3(a4)
  647.         bsr    dopacket
  648.  
  649.         move.l    a2,a1
  650.         LIBCALL    WaitIO
  651.         rts
  652.  
  653. ACT_WRITE
  654.         GETBPTR    (a2)+,a0
  655.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  656.         move.l    (a2),d0
  657.         move.l    d0,dp_Arg3(a4)
  658.         bsr    AllocVec
  659.         move.l    d0,d3
  660.         beq.s    .error_nostore
  661.         move.l    d3,dp_Arg2(a4)
  662.         moveq    #0,d0
  663.         bsr    answerpacket
  664.         move.l    d3,phn_dlbuf(a5)
  665.         move.l    d3,phn_dlbufpt(a5)
  666.         move.l    dp_Arg3(a4),phn_dlbytes(a5)
  667.         rts
  668. .error_nostore
  669.         moveq    #-1,d0
  670.         move.l    #ERROR_OBJECT_TOO_LARGE,d1
  671.         bra    answerpacket
  672.  
  673.  
  674. ACT_WRITEdownload    ;called with phnnode in a5
  675.             ;and a2 *data+4 (must be 'sub'ed with 4)
  676.     IFNE    DEBUG
  677.     lea    ddownloadt(pc),a0
  678.     bsr    dtype
  679.     ENDC
  680.  
  681.         move.l    phn_dlbytes(a5),d2
  682.         move.l    #MAXPACKETSIZE,d3
  683.         cmp.l    d3,d2
  684.         bcc.s    .0
  685.         move.l    d2,d3
  686. .0        lea    -4(a2),a0
  687.         move.l    phn_dlbufpt(a5),a1
  688.         move.l    d3,d0
  689.         move.l    4.w,a6
  690.         LIBCALL    CopyMem
  691.         add.l    d3,phn_dlbufpt(a5)
  692.         sub.l    d3,phn_dlbytes(a5)
  693.         bne.s    .ende
  694.         ; das war das letzte Stück -> jetzt ACTION_WRITE !!
  695.         bsr    dopacket
  696.         bsr    answerpacket
  697.         move.l    phn_dlbuf(a5),a1
  698.         bra    FreeVec
  699. .ende        rts
  700.  
  701. ACT_FINDxxx
  702.         moveq    #fh_SIZEOF,d0
  703.         bsr    AllocVec
  704.         move.l    d0,d3
  705.         move.l    d0,a1
  706.         moveq    #-1,d0
  707.         move.l    d0,fh_Pos(a1)
  708.         move.l    d0,fh_End(a1)
  709.         move.l    (a2)+,dp_Arg2(a4)
  710.         addq.w    #2,a2
  711.         move.l    a2,d0
  712.         lsr.l    #2,d0
  713.         move.l    d0,dp_Arg3(a4)
  714.         move.l    a1,d0
  715.         lsr.l    #2,d0
  716.         move.l    d0,dp_Arg1(a4)
  717.         bsr    dopacket
  718.         tst.w    d0
  719.         beq.s    .return_err
  720.         lsr.l    #2,d3
  721.         move.l    d3,(a3)+
  722.         bra    answerpacket
  723. .return_err    bsr    answerpacket
  724.         move.l    d3,a1
  725.         bra    FreeVec
  726.  
  727. ACT_END
  728.         GETBPTR    (a2),a0
  729.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  730.         bsr    dopacket
  731.         bsr    answerpacket
  732.         GETBPTR    (a2),a1
  733.         bra    FreeVec
  734.  
  735. ACT_SEEK
  736.         GETBPTR    (a2)+,a0
  737.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  738.         move.l    (a2)+,dp_Arg2(a4)
  739.         move.l    (a2),dp_Arg3(a4)
  740.         bsr    dopacket
  741.         bra    answerpacket
  742.  
  743. ACT_FORMAT
  744.         move.l    (a2)+,dp_Arg2(a4)
  745.         addq.w    #2,a2
  746.         move.l    a2,d0
  747.         lsr.l    #2,d0
  748.         move.l    d0,dp_Arg1(a4)
  749.         bsr    dopacket
  750.         bra    answerpacket
  751.  
  752. ACT_MAKE_LINK
  753.         move.l    (a2)+,d2
  754.         move.l    d2,dp_Arg4(a4)
  755.         move.l    (a2)+,dp_Arg1(a4)
  756.         cmp.l    #LINK_HARD,d2
  757.         beq.s    .hardlink
  758. .softlink    move.l    a2,dp_Arg3(a4)
  759.         lea    256+2(a2),a2
  760.         bra.s    .doit
  761. .hardlink    move.l    (a2)+,dp_Arg3(a4)
  762.         addq.w    #2,a2
  763. .doit        move.l    a2,d0
  764.         lsr.l    #2,d0
  765.         move.l    d0,dp_Arg2(a4)
  766.         bsr    dopacket
  767.         bra    answerpacket
  768.  
  769. ACT_SET_FILE_SIZE
  770.         GETBPTR    (a2)+,a0
  771.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  772.         move.l    (a2)+,dp_Arg2(a4)
  773.         move.l    (a2),dp_Arg3(a4)
  774.         bsr    dopacket
  775.         bra    answerpacket
  776.  
  777. ACT_WRITE_PROTECT
  778.         move.l    (a2)+,dp_Arg1(a4)
  779.         move.l    (a2),dp_Arg2(a4)
  780.         bsr    dopacket
  781.         bra    answerpacket
  782.  
  783. ACT_READ_LINK
  784.         move.l    (a2)+,dp_Arg1(a4)
  785.         move.l    (a2)+,dp_Arg4(a4)
  786.         move.l    a2,dp_Arg2(a4)
  787.         move.l    a3,dp_Arg3(a4)
  788.         add.l    dp_Arg4(a4),a3
  789.         bsr    dopacket
  790.         bra    answerpacket
  791.  
  792. ACT_FH_FROM_LOCK
  793.         moveq    #fh_SIZEOF,d0
  794.         bsr    AllocVec
  795.         move.l    d0,d3
  796.         move.l    d0,a1
  797.         moveq    #-1,d0
  798.         move.l    d0,fh_Pos(a1)
  799.         move.l    d0,fh_End(a1)
  800.         move.l    (a2)+,dp_Arg2(a4)
  801.         move.l    d3,d0
  802.         lsr.l    #2,d0
  803.         move.l    d0,dp_Arg1(a4)
  804.         bsr    dopacket
  805.         tst.w    d0
  806.         beq.s    .return_err
  807.         lsr.l    #2,d3
  808.         move.l    d3,(a3)+
  809.         bra    answerpacket
  810. .return_err    bsr    answerpacket
  811.         move.l    d3,a1
  812.         bra    FreeVec
  813.  
  814. ACT_CHANGE_MODE
  815.         move.l    (a2)+,d2
  816.         move.l    d2,dp_Arg1(a4)
  817.         cmp.l    #CHANGE_LOCK,d2
  818.         beq.s    .change_lock
  819. .change_fh    GETBPTR    (a2)+,a0
  820.         move.l    fh_Arg1(a0),dp_Arg2(a4)
  821.         bra.s    .cont
  822. .change_lock    move.l    (a2)+,dp_Arg2(a4)
  823. .cont        move.l    (a2),dp_Arg3(a4)
  824.         bsr    dopacket
  825.         cmp.l    #CHANGE_LOCK,d2
  826.         bne.s    .0
  827.         GETBPTR    dp_Arg2(a4),a2
  828.         move.l    fl_Access(a2),(a3)+
  829. .0        bra    answerpacket
  830.  
  831. ACT_COPY_DIR_FH
  832.         bra    ACT_PARENT_FH
  833.  
  834. ACT_PARENT_FH
  835.         GETBPTR    (a2),a0
  836.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  837.         bsr    dopacket
  838.         tst.l    d0
  839.         beq.s    .return
  840.         move.l    d0,a0
  841.         add.l    a0,a0
  842.         add.l    a0,a0
  843.         move.l    fl_Volume(a0),(a3)+
  844.         move.l    fl_Access(a0),(a3)+
  845. .return        bra    answerpacket
  846.  
  847. ACT_LOCK_RECORD
  848.         GETBPTR    (a2)+,a0
  849.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  850.         move.l    (a2)+,dp_Arg2(a4)
  851.         move.l    (a2)+,dp_Arg3(a4)
  852.         move.l    (a2)+,dp_Arg4(a4)
  853.         move.l    (a2),dp_Arg5(a4)
  854.         bsr    dopacket
  855.         bra    answerpacket
  856.  
  857. ACT_FREE_RECORD
  858.         GETBPTR    (a2)+,a0
  859.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  860.         move.l    (a2)+,dp_Arg2(a4)
  861.         move.l    (a2),dp_Arg3(a4)
  862.         bsr    dopacket
  863.         bra    answerpacket
  864.  
  865. ACT_ADD_NOTIFY
  866.         bra    ACT_NIL
  867.  
  868. ACT_REMOVE_NOTIFY
  869.         bra    ACT_NIL
  870.  
  871. ACT_SERIALIZE_DISK
  872.         bsr    dopacket
  873.         bra    answerpacket
  874.  
  875. ACT_INHIBIT    move.l    (a2)+,dp_Arg1(a4)
  876.         bsr    dopacket
  877.         bra    answerpacket
  878.  
  879. ACT_INFO
  880.         move.l    (a2)+,d4
  881.         moveq    #id_SIZEOF,d0
  882.         bsr    AllocVec
  883.         move.l    d0,a2
  884.         move.l    a2,d3
  885.         lsr.l    #2,d0
  886.         move.l    d0,dp_Arg2(a4)
  887.         move.l    d4,dp_Arg1(a4)
  888.         bsr    dopacket
  889.         tst.w    d0
  890.         beq.s    .return
  891.         moveq    #8,d2
  892. .1        move.l    (a2)+,(a3)+
  893.         dbra    d2,.1
  894. .return        bsr    answerpacket
  895.         move.l    d3,a1
  896.         bra    FreeVec
  897.  
  898. ACT_DISK_INFO
  899.         moveq    #id_SIZEOF,d0
  900.         bsr    AllocVec
  901.         move.l    d0,a2
  902.         move.l    a2,d3
  903.         lsr.l    #2,d0
  904.         move.l    d0,dp_Arg1(a4)
  905.         bsr    dopacket
  906.         tst.w    d0
  907.         beq.s    .return
  908.         moveq    #8,d2
  909. .1        move.l    (a2)+,(a3)+
  910.         dbra    d2,.1
  911. .return        bsr    answerpacket
  912.         move.l    d3,a1
  913.         bra    FreeVec
  914.  
  915. ACT_CURRENT_VOLUME
  916.         GETBPTR    (a2),a0
  917.         move.l    fh_Arg1(a0),dp_Arg1(a4)
  918.         bsr    dopacket
  919.         move.l    d0,(a3)+
  920.         bra    answerpacket
  921.  
  922. ACT_NEWHANDLER
  923. ; -- has other side been reset?? --> current portnumber will be
  924. ; -- associated with a PHN in A5 !!
  925.         move.l    a5,d1
  926.         beq.s    .oki
  927.         * here we have to free all PNSHandlerNodes !!
  928.  
  929.     IFNE    DEBUG
  930.     lea    dresett(pc),a0
  931.     bsr    dtype
  932.     ENDC
  933.  
  934.         movem.l    a2/a3/d2/d3,-(sp)
  935.         move.l    HandlerList(pc),a2
  936. .freeloop    move.l    phn_packet(a2),a0
  937.         sub.l    #sp_Pkt,a0
  938.         bsr    DeleteStdPacket    ;wichtig, da Signalbit freigegeben
  939.         move.l    a2,a1        ;werden muß
  940.         move.l    (a2),a2
  941.         bsr    FreeVec
  942.         move.l    a2,d0
  943.         bne.s    .freeloop
  944.         movem.l    (sp)+,a2/a3/d2/d3
  945.         sub.l    a5,a5
  946.         clr.l    HandlerList ;<<-- hatte ich mal vergessen :(
  947.  
  948. ; -- everything OK now.
  949. .oki        move.l    a2,d1
  950.     IFNE    DEBUG
  951.     lea    daccesst(pc),a0
  952.     bsr    dtype
  953.     move.l    d1,a0
  954.     bsr    dtype
  955.     bsr    dcr
  956.     ENDC
  957.  
  958.         move.l    dosbase(pc),a6
  959.         LIBCALL    DeviceProc
  960.         move.l    d0,d6        ;Handler-ProcessID finden
  961.         beq.s    .error
  962.         move.l    a2,a0
  963. .1        cmp.b    #":",(a2)+
  964.         bne.s    .1
  965.         clr.b    -(a2)
  966.         bsr    FindDosNode
  967.         move.l    d0,d5
  968.         beq.s    .error
  969.         move.l    #phn_SIZEOF,d0
  970.         bsr    AllocVec
  971.         tst.l    d0
  972.         beq.s    .error
  973.         move.l    d0,a2
  974.         move.l    d5,phn_devnode(a2)
  975.         move.w    d2,phn_port(a2)
  976.         move.l    d6,phn_handlerID(a2)
  977.         bsr    CreateStdPacket
  978.         tst.l    d0
  979.         beq.s    .error
  980.         add.l    #sp_Pkt,d0
  981.         move.l    d0,phn_packet(a2)
  982.         lea    HandlerList(pc),a0
  983.         move.l    (a0),phn_next(a2)
  984.         move.l    a2,(a0)
  985.         moveq    #0,d0
  986.         bsr    answerpacket
  987.     IFNE    DEBUG
  988.     lea    dokt(pc),a0
  989.     bsr    dtype
  990.     ENDC
  991.         bra    MsgDiskIns    ;akt. Volumenode erstellen..
  992. .error        moveq    #-1,d0
  993.         bra    answerpacket
  994.  
  995. ; -- Do Packet and Return Results
  996. dopacket    ; a5 *PNSHandlerNode
  997.         move.l    phn_handlerID(a5),a0
  998.         move.l    phn_packet(a5),a1
  999.         sub.w    #sp_Pkt,a1    ;Zeiger zurückdrehen auf Msg-
  1000.         bra    SyncStdPkt    ;Struktur..
  1001.  
  1002. answerpacket    ; d0 Result1
  1003.         ; d1 Result2
  1004.         ; a3 *end of sendbuf
  1005.         lea    sendbuf,a0
  1006.         movem.l    d0/d1,4(a0)
  1007.         move.l    4.w,a6
  1008.         move.l    pronetio(pc),a1
  1009.         sub.l    a0,a3
  1010.         move.l    a0,pnr_Data1(a1)
  1011.         move.l    a3,pnr_Length1(a1)
  1012.         LIBCALL    DoIO
  1013.         rts
  1014.  
  1015. ****************************************************************************
  1016.  
  1017. ; -- Find DLT_DEVICE entry in DosList with dol_Name = [a0]
  1018. FindDosNode    ; a0 *devicename
  1019.         ; RETURNS d0 *DosList or NULL
  1020.         movem.l    d6/a2/a5/a6,-(sp)
  1021.         moveq    #0,d6
  1022.         move.l    a0,a2
  1023.         move.l    4.w,a6
  1024.         LIBCALL    Forbid
  1025.         move.l    dosbase(pc),a5
  1026.         move.l    dl_Root(a5),a5
  1027.         move.l    rn_Info(a5),a5
  1028.         add.l    a5,a5
  1029.         add.l    a5,a5
  1030.         addq.w    #di_DevInfo,a5
  1031. .loop        move.l    (a5),d0
  1032.         beq.s    .ende
  1033.         add.l    d0,d0
  1034.         add.l    d0,d0
  1035.         move.l    d0,a5
  1036.         move.l    dol_Type(a5),d0        ;DLT_DEVICE ?
  1037.         bne.s    .loop
  1038.         move.l    dol_Name(a5),a0
  1039.         add.l    a0,a0
  1040.         add.l    a0,a0
  1041.         addq.w    #1,a0
  1042.         move.l    a2,a1
  1043.         bsr    CompareStrings
  1044.         tst.w    d0
  1045.         bne.s    .loop
  1046.         ;gefunden !
  1047.         move.l    a5,d6
  1048. .ende        LIBCALL    Permit
  1049.         move.l    d6,d0
  1050.         movem.l    (sp)+,d6/a2/a5/a6
  1051.         rts
  1052.  
  1053. ; -- Find DLT_VOLUME entry in DosList with dol_Task = a0
  1054. FindVolume    ; a0 *HandlerID
  1055.         ; RETURNS d0 *DosList or NULL
  1056.         movem.l    d6/a2/a5/a6,-(sp)
  1057.         moveq    #0,d6
  1058.         move.l    a0,a2
  1059.         move.l    4.w,a6
  1060.         LIBCALL    Forbid
  1061.         move.l    dosbase(pc),a5
  1062.         move.l    dl_Root(a5),a5
  1063.         move.l    rn_Info(a5),a5
  1064.         add.l    a5,a5
  1065.         add.l    a5,a5
  1066.         addq.w    #di_DevInfo,a5
  1067. .loop        move.l    (a5),d0
  1068.         beq.s    .ende
  1069.         add.l    d0,d0
  1070.         add.l    d0,d0
  1071.         move.l    d0,a5
  1072.         cmp.l    #DLT_VOLUME,dol_Type(a5)
  1073.         bne.s    .loop
  1074.         cmp.l    dol_Task(a5),a2
  1075.         bne.s    .loop
  1076.         ;gefunden !
  1077.         move.l    a5,d6
  1078. .ende        LIBCALL    Permit
  1079.         move.l    d6,d0
  1080.         movem.l    (sp)+,d6/a2/a5/a6
  1081.         rts
  1082.  
  1083. ; -- Compare two null-terminated strings. Case-insensitive
  1084. CompareStrings    ; a0 *String1
  1085.         ; a1 *String2
  1086.         ; RETURNS d0 = 0 --> Strings equal
  1087.         move.l    d2,-(sp)
  1088.         moveq    #-1,d0
  1089. .loop        move.b    (a0)+,d1
  1090.         move.b    (a1)+,d2
  1091.         bclr    #5,d1
  1092.         bclr    #5,d2
  1093.         cmp.b    d1,d2
  1094.         bne.s    .ende
  1095.         tst.b    d1
  1096.         bne.s    .loop
  1097.         moveq    #0,d0
  1098. .ende        move.l    (sp)+,d2
  1099.         rts
  1100.  
  1101. ; -- AllocVec on Kick1.3 - requirements fixed to PUBLIC|CLEAR
  1102. AllocVec    ; d0 bytesize
  1103.         movem.l    d2/a6,-(sp)
  1104.         move.l    4.w,a6
  1105.         addq.l    #4,d0
  1106.         move.l    d0,d2
  1107.         move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  1108.         LIBCALL    AllocMem
  1109.         tst.l    d0
  1110.         beq.s    .nomem
  1111.         move.l    d0,a0
  1112.         move.l    d2,(a0)+
  1113.         move.l    a0,d0
  1114. .nomem        movem.l    (sp)+,d2/a6
  1115.         rts
  1116.  
  1117. ; -- FreeVec
  1118. FreeVec        ; a1 memory-block
  1119.         move.l    a6,-(sp)
  1120.         move.l    4.w,a6
  1121.         move.l    -(a1),d0
  1122.         LIBCALL    FreeMem
  1123.         move.l    (sp)+,a6
  1124.         rts
  1125.  
  1126. dec2long    ; konvertiert Dezimalstring ab (a0) zu Longword in D1 !!
  1127.         moveq    #0,d1
  1128. .loop        moveq    #0,d0
  1129.         move.b    (a0)+,d0
  1130.         sub.b    #"0",d0
  1131.         cmp.b    #9,d0
  1132.         bhi.s    .oki
  1133.         move.l    d1,d2
  1134.         lsl.l    #3,d1
  1135.         add.l    d2,d1
  1136.         add.l    d2,d1
  1137.         add.l    d0,d1
  1138.         bra.s    .loop
  1139. .oki        rts
  1140.  
  1141. ***************************************************************************
  1142. ; -- Spezielle Sachen, die nichts mit dem Netzwerk zu tun haben, sondern
  1143. ; -- für pronet-run und pronet-page gedacht sind !!!!
  1144.  
  1145. ; in a2 data nach dp_Action..
  1146. ACT_RUN
  1147.         move.l    dosbase(pc),a6
  1148.         move.l    a2,d1
  1149.         moveq    #0,d2
  1150.         moveq    #0,d3
  1151.         jsr    -222(a6)
  1152.         rts
  1153.  
  1154. ACT_PAGE
  1155.         move.l    4.w,a6
  1156.         lea    intname(pc),a1
  1157.         moveq    #0,d0
  1158.         jsr    -552(a6)
  1159.         move.l    d0,a6
  1160.         lea    sendbuf,a3
  1161.         lea    .tex1(pc),a0
  1162. .1        move.b    (a0)+,(a3)+
  1163.         bpl.s    .1
  1164.         move.b    #0,(a3)+
  1165.         move.b    #20,(a3)+
  1166.         move.b    #25,(a3)+
  1167. .2        move.b    (a2)+,d0
  1168.         cmp.b    #$0a,d0
  1169.         beq.s    .3
  1170.         move.b    d0,(a3)+
  1171.         bra.s    .2
  1172. .3        clr.b    (a3)+
  1173.         clr.b    (a3)+
  1174.         lea    sendbuf,a0
  1175.         moveq    #0,d0
  1176.         moveq    #40,d1
  1177.         LIBCALL    DisplayAlert
  1178.         move.l    a6,a1
  1179.         move.l    4.w,a6
  1180.         jsr    -414(a6)
  1181.         rts
  1182.  
  1183. .tex1        dc.b    0,20,15,"pronet-page message:",0,-1
  1184.         even
  1185.  
  1186.         include    "A:ProNET/source/dospackets.s"
  1187.         include    "A:ProNET/source/devio.s"
  1188.  
  1189.     IFNE    DEBUG
  1190.         include    "A:OSdebugging.s"
  1191. dwaitt    dc.b    "Waiting for signals..",10,0
  1192. ddownloadt    dc.b    "**DOWNLOAD**",10,0
  1193. dresett        dc.b    27,"c** RESET **",10,0
  1194. daccesst    dc.b    "NEWHANDLER requires access to ",0
  1195. dokt        dc.b    "!access possible!",10,0
  1196. dreadt        dc.b    "ACT_READ: ",0
  1197.     even
  1198.     ENDC
  1199. ;----------------------------------------------------------------------------
  1200.  
  1201. dosname        dc.b    "dos.library",0
  1202. intname        dc.b    "intuition.library",0
  1203. pronetname    dc.b    "pronet.device",0
  1204. inputname    dc.b    "input.device",0
  1205. starttext    dc.b    "ProNET V2 by Michael Krause - Server active..",10
  1206. starttextl    equ    *-starttext
  1207. procname    dc.b    "ProNET-Server"
  1208.         even
  1209.  
  1210. unit        dc.l    0
  1211. ourtask        dc.l    0
  1212. dosbase        dc.l    0
  1213. pronetio    dc.l    0
  1214. inputio        dc.l    0
  1215. pronetmsgport    dc.l    0
  1216. actpronetmsg    dc.l    0
  1217. HandlerList    dc.l    0    ;einfache Liste mit allen Handlers, die
  1218.                 ;an uns hängen..
  1219.  
  1220.         section    b,bss
  1221.  
  1222. sendbuf        ds.b    $4000
  1223. workfib        ds.b    fib_SIZEOF
  1224.